;  PROGRAM:  ERASE
;  VERSION:  4.0
;  DATE:  16 JAN 83
;  AUTHOR:  RICHARD CONN
;  PREVIOUS VERSION:  3.3 (6 JAN 83), 3.2 (7 DEC 82)
;  PREVIOUS VERSION:  3.1 (9 NOV 82), 3.0 (18 OCT 82), 2.0 (18 NOV 81)
;  PREVIOUS VERSION:  1.2 (12 APR 81), 1.3 (25 OCT 81), 1.4 (26 OCT 81)
;  PREVIOUS VERSION:  1.0 (14 JUN 80), 1.1 (19 OCT 80)
VERS	equ	40

;
;	This program is Copyright (c) 1982, 1983 by Richard Conn
;	All Rights Reserved
;
;	ZCPR2 and its utilities, including this one, are released
; to the public domain.  Anyone who wishes to USE them may do so with
; no strings attached.  The author assumes no responsibility or
; liability for the use of ZCPR2 and its utilities.
;
;	The author, Richard Conn, has sole rights to this program.
; ZCPR2 and its utilities may not be sold without the express,
; written permission of the author.
;


;
;  ERASE COMMAND --
;	Erase files specified in command line.  Command is of the form --
;		ERASE DIR:FILENAME.TYP ISR
;	If I option is given, Inspection of each file is performed and
; the user is given the option to erase the file or not.  If S option is
; given, System files are included in erase procedure.  Drive specification
; is optional.  If R option is given, R/O files are erased without prompting.
;

FALSE	EQU	0
TRUE	EQU	NOT FALSE

ESIZE	EQU	16	; SIZE OF DIR ENTRY (FROM SYSLIB DIRF ROUTINE)

	EXT	DIRF	; DIRECTORY PROCESSOR

	EXT	ZFNAME	; FILE NAME PROCESSOR
	EXT	ZGPINS	; ZCPR2 BUFFER INIT

	EXT	PHLDC	; PRINT HL AS DECIMAL CHARS
	EXT	PRINT	; PRINT ROUTINE
	EXT	COUT	; CONSOLE OUTPUT ROUTINE
	EXT	CIN	; CONSOLE INPUT ROUTINE
	EXT	CAPS	; CAPITALIZE ROUTINE
	EXT	CRLF	; NEW LINE ROUTINE
	EXT	FILLB	; FILL ROUTINE
	EXT	CODEND	; CODE END COMPUTATION ROUTINE

;
;  CP/M EQUATES
;
CPM	EQU	0	; WARM BOOT
BDOS	EQU	5	; BDOS ENTRY
FCB	EQU	5CH	; FCB
BUFF	EQU	80H	; INPUT LINE BUFFER
CR	EQU	13	; <CR>
LF	EQU	10	; <LF>

;
;  Branch to Start of Program
;
	JMP	START

;
;******************************************************************
;
;  SINSFORM -- ZCPR2 Utility Standard General Purpose Initialization Format
;
;	This data block precisely defines the data format for
; initial features of a ZCPR2 system which are required for proper
; initialization of the ZCPR2-Specific Routines in SYSLIB.
;

;
;  EXTERNAL PATH DATA
;
EPAVAIL:
	DB	0FFH	; IS EXTERNAL PATH AVAILABLE? (0=NO, 0FFH=YES)
EPADR:
	DW	40H	; ADDRESS OF EXTERNAL PATH IF AVAILABLE

;
;  INTERNAL PATH DATA
;
INTPATH:
	DB	0,0	; DISK, USER FOR FIRST PATH ELEMENT
			; DISK = 1 FOR A, '$' FOR CURRENT
			; USER = NUMBER, '$' FOR CURRENT
	DB	0,0
	DB	0,0
	DB	0,0
	DB	0,0
	DB	0,0
	DB	0,0
	DB	0,0	; DISK, USER FOR 8TH PATH ELEMENT
	DB	0	; END OF PATH

;
;  MULTIPLE COMMAND LINE BUFFER DATA
;
MCAVAIL:
	DB	0FFH	; IS MULTIPLE COMMAND LINE BUFFER AVAILABLE?
MCADR:
	DW	0FF00H	; ADDRESS OF MULTIPLE COMMAND LINE BUFFER IF AVAILABLE

;
;  DISK/USER LIMITS
;
MDISK:
	DB	4	; MAXIMUM NUMBER OF DISKS
MUSER:
	DB	31	; MAXIMUM USER NUMBER

;
;  FLAGS TO PERMIT LOG IN FOR DIFFERENT USER AREA OR DISK
;
DOK:
	DB	0FFH	; ALLOW DISK CHANGE? (0=NO, 0FFH=YES)
UOK:
	DB	0FFH	; ALLOW USER CHANGE? (0=NO, 0FFH=YES)

;
;  PRIVILEGED USER DATA
;
PUSER:
	DB	10	; BEGINNING OF PRIVILEGED USER AREAS
PPASS:
	DB	'chdir',0	; PASSWORD FOR MOVING INTO PRIV USER AREAS
	DS	41-($-PPASS)	; 40 CHARS MAX IN BUFFER + 1 for ending NULL

;
;  CURRENT USER/DISK INDICATOR
;
CINDIC:
	DB	'$'	; USUAL VALUE (FOR PATH EXPRESSIONS)

;
;  DMA ADDRESS FOR DISK TRANSFERS
;
DMADR:
	DW	80H	; TBUFF AREA

;
;  NAMED DIRECTORY INFORMATION
;
NDRADR:
	DW	00000H	; ADDRESS OF MEMORY-RESIDENT NAMED DIRECTORY
NDNAMES:
	DB	64	; MAX NUMBER OF DIRECTORY NAMES
DNFILE:
	DB	'NAMES   '	; NAME OF DISK NAME FILE
	DB	'DIR'		; TYPE OF DISK NAME FILE

;
;  REQUIREMENTS FLAGS
;
EPREQD:
	DB	0FFH	; EXTERNAL PATH?
MCREQD:
	DB	0FFH	; MULTIPLE COMMAND LINE?
MXREQD:
	DB	0FFH	; MAX USER/DISK?
UDREQD:
	DB	0FFH	; ALLOW USER/DISK CHANGE?
PUREQD:
	DB	0FFH	; PRIVILEGED USER?
CDREQD:
	DB	0FFH	; CURRENT INDIC AND DMA?
NDREQD:
	DB	0FFH	; NAMED DIRECTORIES?
Z2CLASS:
	DB	0	; CLASS 0
	DB	'ZCPR2'
	DS	10	; RESERVED

;
;  END OF SINSFORM -- STANDARD DEFAULT PARAMETER DATA
;
;******************************************************************
;

;
;  Start of Program
;
START:
	LXI	H,0	; GET STACK PTR
	DAD	SP
	SHLD	STACK	; SAVE IT
	LXI	SP,STACK	; SET SP
	MVI	E,0FFH	; GET CURRENT USER
	MVI	C,32
	CALL	BDOS
	STA	CURUSER	; SAVE IT
	MVI	A,0FFH	; SET DEFAULT USER
	STA	USER

	CALL	ZGPINS	; INIT BUFFERS
	CALL	PRINT
	DB	'ERASE  Version '
	DB	VERS/10+'0','.',(VERS MOD 10)+'0',0
	LDA	FCB+1	; GET FIRST CHAR OF FILE NAME
	CPI	'/'	; OPTION CAUGHT?
	JNZ	ECONT

;  PRINT HELP INFORMATION
HELP:
	CALL	PRINT
	DB	CR,LF,'ERASE Command --'
	DB	CR,LF,'  ERASE dir:filename.typ,dir:fn.ft,dir:fn.ft,... ooo'
	DB	CR,LF,LF,'d is disk, u is user, and o is one or more option '
	DB	'letters.'
	DB	CR,LF,'If one or more options are specified, the o MUST be '
	DB	'preceded by a space.'
	DB	CR,LF,'Nothing is required, and wild cards (?,*) are '
	DB	CR,LF,'permitted.  o is optional, and valid options are -'
	DB	CR,LF,'	I -- Inspect Mode (Give user option to delete)'
	DB	CR,LF,'	R -- Erase R/O Files without prompting user'
	DB	CR,LF,'	S -- Include System Files'
	DB	CR,LF,'dir: is a named directory or the form du:.'
	DB	CR,LF,'Named Directories are ',0
	LDA	NDREQD	; NAMED DIRS ON?
	ORA	A	; 0=NO
	JNZ	HELP1
	CALL	PRINT
	DB	'NOT ',0
HELP1:
	CALL	PRINT
	DB	'Permitted in this Version of ERASE'
	DB	CR,LF,'If u is omitted, current user is assumed, as with d.'
	DB	CR,LF,LF,'Special forms are:'
	DB	CR,LF,'	ERASE dir:	<-- Erase all files in named directory'
	DB	CR,LF,'	ERASE du:	<-- Erase all files in disk d, user u'
	DB	CR,LF,'	ERASE u:	<-- Erase all files in user u on '
	DB	'current disk'
	DB	CR,LF,'	ERASE d:	<-- Erase all files on disk d in '
	DB	'current user'
	DB	0
	JMP	RETURN

;  RESET USER NUMBER IF IT HAS CHANGED
RSETU:
	PUSH	H	; SAVE REGS
	PUSH	D
	PUSH	B
	LDA	CURUSER	; GET CURRENT USER
	MOV	E,A	; ... IN E
	MVI	C,32	; PREP TO CHANGE USER
	LDA	USER	; USER CHANGED?
	CPI	0FFH	; NO CHANGE?
	CNZ	BDOS	; IF NO 0FFH, THEN CHANGE OCCURRED
	POP	B	; RESTORE REGS
	POP	D
	POP	H
	RET

;  RETURN TO OS
RETURN:
	CALL	RSETU	; RESET USER IF NECESSARY
RETX:
	LHLD	STACK	; GET OLD STACK
	SPHL		; SET IT
	RET

;  USER CHANGE NOT ALLOWED ERROR
UNOK:
	CALL	PRINT
	DB	CR,LF,'User Number Change Not Allowed -- Aborting',0
	JMP	RETURN

;  DISK CHANGE NOT ALLOWED ERROR
DNOK:
	CALL	PRINT
	DB	CR,LF,'Disk Change Not Allowed -- Aborting',0
	JMP	RETURN

;  PLACE ZERO AT END OF BUFFER
ECONT:
	LXI	H,BUFF	; PT TO BUFFER
	MOV	A,M	; GET COUNT
	INX	H	; PT TO FIRST CHAR
	ADD	L	; PT TO END OF BUFFER
	MOV	L,A
	MOV	A,H
	ACI	0
	MOV	H,A
	MVI	M,0

;  COPY BUFFER INTO TEMP BUFFER
	LXI	H,BUFF	; PT TO BUFFER
	MOV	B,M	; GET CHAR COUNT
	INX	H	; PT TO FIRST CHAR
	INR	B	; ADD ENDING 0
	LXI	D,CMDLNE	; PT TO CMDLNE BUFFER
	CALL	MOVEB	; COPY INTO COMMAND LINE BUFFER

;  EXTRACT FLAGS IF PRESENT
	XRA	A	; SET NO INSPECT, NO R/O, AND NO SYSTEM FILES
	STA	INSPECT
	STA	READONLY
	MVI	A,80H	; SELECT NON-SYS
	STA	SYSTEM
	LXI	H,0	; SET FILE COUNT
	SHLD	FILECNT
	LXI	H,CMDLNE	; PT TO BUFFER
;  SKIP TO FILE NAME STRING
SBLANK:
	MOV	A,M	; SKIP TO NON-BLANK
	CPI	' '	; <SP>?
	JNZ	SBL1
	INX	H	; PT TO NEXT CHAR
	JMP	SBLANK
;  SKIP TO END OF FILE NAME STRING
SBL1:
	MOV	A,M	; SKIP TO <SP> OR EOL
	ORA	A	; DONE?
	JZ	OPT
	CPI	' '	; <SP>
	JZ	OPT
	INX	H	; PT TO NEXT
	JMP	SBL1
;  CHECK FOR LEADING SLASH ON OPTION AND SKIP IT IF SO
OPT:
	CPI	'/'	; OPTION CHAR?
	JNZ	OPTION
	INX	H	; SKIP SLASH
;  PROCESS LIST OF OPTIONS
OPTION:
	MOV	A,M	; GET BYTE
	ORA	A	; DONE?
	JZ	DSPEC
	INX	H	; PT TO NEXT CHAR
	CPI	' '	; SKIP OVER SPACES
	JZ	OPTION
	CPI	'/'	; IF OPTION LETTER, OBVIOUS ERROR, SO HELP
	JZ	HELP
	CPI	'I'	; INSPECT?
	JZ	OPTINS
	CPI	'R'	; READ/ONLY?
	JZ	OPTRO
	CPI	'S'	; SYSTEM FILES?
	JNZ	HELP
	MVI	A,0C0H	; SET FOR SYS AND NON-SYS FILES
	STA	SYSTEM
	JMP	OPTION
OPTINS:
	MVI	A,0FFH	; INSPECT
	STA	INSPECT
	JMP	OPTION
OPTRO:
	MVI	A,0FFH	; SET R/O
	STA	READONLY
	JMP	OPTION

;  EXTRACT DISK, USER, AND FILE NAME INFORMATION
DSPEC:
	LXI	H,CMDLNE-1	; PT TO BEFORE FIRST BYTE
DSPEC0:
	INX	H	; PT TO BYTE
	MOV	A,M	; GET BYTE
	ORA	A	; DONE?
	JZ	HELP
	CPI	' '	; <SP>?
	JZ	DSPEC0
;
;  MAJOR REENTRY POINT WHEN FILE SPECS ARE SEPARATED BY COMMAS
;    HL PTS TO FIRST BYTE OF NEXT FILE SPEC
;
DSPEC1:
	CALL	RSETU	; RESET USER IF NECESSARY
	LXI	D,FCB	; PT TO FCB IN DE, PT TO FIRST CHAR OF FILE NAME IN HL

	PUSH	H	; SAVE HL PTR
	CALL	CODEND	; GET ADDRESS OF SCRATCH AREA
	MOV	B,H	; ADDRESS IN BC
	MOV	C,L
	POP	H

	CALL	ZFNAME	; EXTRACT FILE NAME INTO FCB, AND GET DISK AND USER
	JZ	DERR	; ERROR HANDLER

	SHLD	NEXTCH	; SAVE PTR TO DELIMITER WHICH ENDED SCAN
	PUSH	B	; SAVE BC
	LXI	H,FCB+1	; SEE IF FILE NAME IS ALL WILD
	MVI	B,11	; 11 BYTES
WTEST:
	MOV	A,M	; GET BYTE
	INX	H	; PT TO NEXT
	CPI	'?'	; WILD?
	JNZ	NOWILD
	DCR	B	; COUNT DOWN
	JNZ	WTEST
	LDA	INSPECT	; INSPECT?
	ORA	A	; 0=NO
	JNZ	NOWILD
	CALL	PRINT
	DB	CR,LF,'Erase All Files? ',0
	CALL	CIN	; GET RESPONSE
	CALL	CAPS	; CAPITALIZE
	CALL	COUT	; ECHO
	CPI	'Y'	; YES?
	JZ	NOWILD
	CALL	PRINT
	DB	CR,LF,'Aborting',0
	JMP	RETX
NOWILD:
	POP	B	; GET BC
	MOV	A,C	; GET NEW USER
	STA	USER	; SAVE IT
	MOV	A,B	; SAVE POSSIBLE DRIVE SPEC
	CPI	0FFH	; CURRENT DISK?
	JZ	USPEC
	LDA	MDISK	; GET MAX DISK NUMBER
	DCR	B	; ADJUST TO WITHIN BOUNDS 0-15
	CMP	B	; WITHIN BOUNDS?
	MOV	A,B	; GET DISK NUMBER IN A
	JNC	DSPEC2
DERR:
	CALL	PRINT
	DB	CR,LF,'Invalid Drive or User Specification',0
	JMP	RETURN

;  LOG IN SPECIFIED DISK
DSPEC2:
	PUSH	B	; SAVE BC
	MOV	E,A	; DISK NUMBER IN E
	LDA	DOK	; OK TO DO SO?
	ORA	A	; 0=NO
	JZ	DNOK	; NOT ALLOWED ABORT
	MVI	C,14	; LOG IN DISK
	CALL	BDOS
	POP	B	; GET BC

;  CHECK FOR USER NUMBER
USPEC:
	MOV	A,C	; GET NEW USER NUMBER
	CPI	0FFH	; DEFAULT USER?
	JZ	ERASE
	CPI	'?'	; ALL USERS NOT ALLOWED?
	JZ	UERR
	LDA	MUSER	; GET MAX USER NUMBER
	CMP	C
	MOV	A,C	; USER NUMBER IN A
	JNC	ULOG
UERR:
	CALL	PRINT
	DB	CR,LF,'Invalid User Number',0
	JMP	RETURN
ULOG:
	MOV	E,A	; USER NUMBER IN E
	LDA	UOK	; ALLOWED?
	ORA	A	; 0=NO
	JZ	UNOK	; DISALLOWED AND ABORT
	MVI	C,32	; SELECT USER
	CALL	BDOS

;  LOAD DIRECTORY AND ERASE FILES
ERASE:
	CALL	CODEND	; PT TO END OF CODE
	LDA	SYSTEM	; GET SYS/NON-SYS FLAGS
	LXI	D,FCB	; PT TO FCB
	CALL	DIRF	; LOAD DIR, SELECT FILES, PACK, AND ALPHABETIZE

;  ERASE DIR FILES; HL PTS TO FIRST FILE, BC=FILE COUNT
	CALL	ERAFILES

;  CHECK FOR NEXT FILE SPEC
	LHLD	NEXTCH	; GET PTR
	MOV	A,M	; GET DELIM
	CPI	','	; ANOTHER FILE?
	JNZ	ERADONE
	INX	H	; PT TO CHAR AFTER COMMA
	JMP	DSPEC1	; CONTINUE PROCESSING

;  ERASE COMPLETE -- PRINT COUNT AND EXIT
ERADONE:
	CALL	PRCOUNT	; PRINT FILE COUNT
	JMP	RETURN

;  ERASE SELECTED FILES
ERAFILES:
	MOV	A,B	; CHECK FOR ANY FILES LOADED
	ORA	C
	RZ

;  PRINT FILE NAME
ERAFLP:
	PUSH	B	; SAVE ENTRY COUNT
	CALL	CRLF	; NEW LINE
	PUSH	H	; SAVE PTR TO FCB
	INX	H	; PT TO FILE NAME
	MVI	B,8	; PRINT NAME
	CALL	PRNT
	MVI	A,'.'	; DECIMAL
	CALL	COUT
	MVI	B,3	; PRINT TYPE
	CALL	PRNT
	POP	H	; GET PTR

;  CHECK FOR INSPECTION AND INSPECT IF SET
	LDA	INSPECT	; GET FLAG
	ORA	A	; 0=NO
	JZ	ERAIT

;  PROMPT USER FOR ERASE
	CALL	ERAQ	; ERASE QUESTION
	CPI	'Q'	; QUIT?
	JZ	QUIT
	CPI	'Y'	; YES?
	JZ	ERAIT

;  DON'T ERASE FILE
ERANO:
	CALL	PRINT
	DB	'  ++ NOT Erased ++',0
	JMP	ERATEST

;  PROMPT USER FOR ERASE
ERAQ:
	CALL	PRINT	; PRINT PROMPT
	DB	' -- Erase (Y/N/Q=Quit/other=N)? ',0
	CALL	CIN	; GET RESPONSE
	CALL	CAPS	; CAPITALIZE
	CALL	COUT	; ECHO
	RET

;  QUIT ERASE PROGRAM
QUIT:
	CALL	PRCOUNT	; PRINT COUNT OF FILES ERASED
	CALL	PRINT
	DB	'  ++ QUIT -- Returning to CP/M ++',0
	JMP	RETURN

;  ERASE FILE
ERAIT:
	PUSH	H
	LXI	D,9	; PT TO R/O ATTRIBUTE
	DAD	D
	MOV	A,M	; GET R/O ATTRIBUTE
	POP	H	; RESTORE PTR
	ANI	80H	; R/O?
	JZ	ERAIT1	; R/W - PROCEED
	LDA	READONLY	; GET R/O ERASE FLAG
	ORA	A	; 0=QUERY
	JNZ	ERAIT0	; ERASE WITHOUT QUESTION IF FLAG SET
	CALL	PRINT	; NOTIFY USER AND PROMPT
	DB	CR,LF,' File is R/O',0
	CALL	ERAQ	; ASK QUESTION
	CPI	'Q'	; QUIT?
	JZ	QUIT
	CPI	'Y'	; ERASE R/O
	JNZ	ERATEST	; DO NOT ERASE IF NOT YES

;  ERASE R/O FILE
ERAIT0:
	CALL	DET$VERS	; DETERMINE VERSION NUMBER
	JZ	ERAIT1	; IF CP/M 1.X - DO NOT RESET ATTRIBUTE
	PUSH	H	; SAVE PTR TO FILE ENTRY
	LXI	D,9	; PT TO R/O ATTRIBUTE
	DAD	D
	MOV	A,M	; GET ATTRIBUTE
	ANI	7FH	; MAKE R/W
	MOV	M,A
	POP	H	; GET PTR TO FCB
	PUSH	H	; SAVE PTR AGAIN
	XCHG		; DE PTS TO FCB
	XRA	A	; MAKE SURE CURRENT DISK IS SELECTED
	STAX	D
	MVI	C,30	; SET FILE ATTRIBUTES
	CALL	BDOS
	POP	H

;  ERASE R/W FILE
ERAIT1:
	PUSH	H	; SAVE PTR TO FILE NAME TO ERASE
	INX	H	; PT TO FIRST BYTE OF NAME
	LXI	D,ERAFCB	; SET UP FCB
	PUSH	D	; SAVE PTR
	XRA	A	; A=0
	STAX	D	; CURRENT DISK
	INX	D	; PT TO FIRST CHAR
	MVI	B,11	; COPY 11 BYTES
	CALL	MOVEB	; COPY HL TO DE FOR 11 BYTES
	XCHG		; HL PTS TO REST OF FCB
	MVI	B,24	; FILL REST OF FCB WITH ZEROES
	XRA	A	; A=0
	CALL	FILLB
	POP	D	; GET PTR
	MVI	C,19	; DELETE FILE
	CALL	BDOS
	CALL	PRINT
	DB	'  ++ Erased ++',0
	LHLD	FILECNT	; INCREMENT COUNT
	INX	H
	SHLD	FILECNT
	POP	H	; GET PTR TO DIRECTORY ENTRY

;  PT TO NEXT ENTRY
ERATEST:
	LXI	D,ESIZE	; PT TO NEXT ENTRY
	DAD	D
	POP	B	; GET COUNT
	DCX	B	; COUNT DOWN
	MOV	A,B	; CHECK FOR ZERO
	ORA	C
	JNZ	ERAFLP

;  RETURN TO CALLER
	RET

;
;  COPY HL TO DE FOR B BYTES
;
MOVEB:
	MOV	A,M	; GET BYTE
	STAX	D	; PUT BYTE
	INX	H	; PT TO NEXT
	INX	D
	DCR	B	; COUNT DOWN
	JNZ	MOVEB
	RET

;
;  PRINT CHARS PTED TO BY HL FOR B BYTES
;
PRNT:
	MOV	A,M	; GET CHAR
	CALL	COUT
	INX	H	; PT TO NEXT
	DCR	B	; COUNT DOWN
	JNZ	PRNT
	RET

;
;  PRINT COUNT OF NUMBER OF FILES ERASED
;
PRCOUNT:
	CALL	CRLF	; NEW LINE
	CALL	PRINT
	DB	CR,LF,'++ ',0
	LHLD	FILECNT	; GET COUNT
	MOV	A,L	; CHECK FOR NONE
	ORA	H
	JZ	PRNO
	CALL	PHLDC	; PRINT DECIMAL COUNT
	JMP	PRMS
PRNO:
	CALL	PRINT
	DB	'No ',0
PRMS:
	LHLD	FILECNT	; 1 FILE ERASED?
	MOV	A,H	; HIGH ZERO?
	ORA	A
	JNZ	PRMULT
	MOV	A,L	; LOW ONE?
	CPI	1
	JZ	PRSING
PRMULT:
	CALL	PRINT
	DB	' Files Erased ++',0
	RET
PRSING:
	CALL	PRINT
	DB	' File  Erased ++',0
	RET

;
;  DETERMINE CP/M VERSION NUMBER
;	RETURN W/ZERO FLAG SET IF CP/M 1.X
;
DET$VERS:
	PUSH	B
	PUSH	D
	PUSH	H
	MVI	C,12	; DET VERS
	CALL	BDOS
	MOV	A,H	; SET FLAG
	ORA	L
	POP	H
	POP	D
	POP	B
	RET

;
;  BUFFERS
;
INSPECT:
	DS	1	; INSPECT FLAG (0=NO, 0FFH=YES)
SYSTEM:
	DS	1	; SYSTEM FLAG (0=NO, 80H=YES)
READONLY:
	DS	1	; READ/ONLY FLAG (0=QUERY FOR R/O, 0FFH=DON'T)
USER:
	DS	1	; NEW USER, OR 0FFH IF NO CHANGE
CURUSER:
	DS	1	; CURRENT USER NUMBER
NEXTCH:
	DS	2	; PTR TO NEXT CHAR IN MULTIFILE COMMAND LINE
FILECNT:
	DS	2	; COUNT OF NUMBER OF FILES ERASED
ERAFCB:
	DS	40	; FCB FOR ERASE
CMDLNE:
	DS	256	; ALLOW MAX SIZE OF COMMAND LINE
	DS	100	; STACK AREA
STACK:
	DS	2	; OLD STACK PTR

	END
